// DatastoreItems.h : Declaration of the CDatastoreItems

#pragma once
#include "resource.h"       // main symbols

#include "TSSrv_i.h"


#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
#endif



// CDatastoreItems

class ATL_NO_VTABLE CDatastoreItems :
	public CComObjectRootEx<CComSingleThreadModel>,
	public CComCoClass<CDatastoreItems, &CLSID_DatastoreItems>,
	public ISupportErrorInfo,
	public IDispatchImpl<IDatastoreItems, &IID_IDatastoreItems, &LIBID_TSSrv, /*wMajor =*/ 1, /*wMinor =*/ 0>,
    public IEnumVARIANT
{
    friend class CDatastore;
public:
	CDatastoreItems()
	{
	}

DECLARE_REGISTRY_RESOURCEID(IDR_DATASTOREITEMS)


BEGIN_COM_MAP(CDatastoreItems)
	COM_INTERFACE_ENTRY(IDatastoreItems)
	COM_INTERFACE_ENTRY(IDispatch)
	COM_INTERFACE_ENTRY(ISupportErrorInfo)
    COM_INTERFACE_ENTRY(IEnumVARIANT)
END_COM_MAP()

// ISupportsErrorInfo
	STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);


	DECLARE_PROTECT_FINAL_CONSTRUCT()

	HRESULT FinalConstruct()
	{
		/*spConn.CreateInstance(__uuidof(ADODB::Connection));*/
		return S_OK;
	}

	void FinalRelease()
	{
	}

public:
    //IEnumVARIANT
	STDMETHOD(Next)(ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched);
	STDMETHOD(Skip)(ULONG celt);
	STDMETHOD(Reset)(void);
	STDMETHOD(Clone)(IEnumVARIANT **ppEnum);

	STDMETHOD(get__NewEnum)(IUnknown** pVal);
	STDMETHOD(get_Count)(LONG* pVal);
	STDMETHOD(get_Item)(LONG Index, IDatastoreItem** pVal);

private:
	std::vector<INT> m_Ids;
    INT m_Cur;
	TsDatastoreItemTypeEnum m_Type;
	CDatastore * m_pDs;
public:

	void AddItem(INT id)
	{
		m_Ids.push_back(id);
	}
	HRESULT Init(CDatastore * pDs, TsDatastoreItemTypeEnum type);
	STDMETHOD(get_Type)(TsDatastoreItemTypeEnum* pVal);
};

OBJECT_ENTRY_AUTO(__uuidof(DatastoreItems), CDatastoreItems)
